define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'pinyin'], function ($, undefined, Backend, Table, Form, pinyin) {

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'auth/admin/index',
                    add_url: 'auth/admin/add',
                    edit_url: 'auth/admin/edit',
                    del_url: 'auth/admin/del',
                    multi_url: 'auth/admin/multi',
                }
            });

            var table = $("#table");

            //在表格内容渲染完成后回调的事件
            table.on('post-body.bs.table', function (e, json) {
                var admin = window.Config && window.Config.admin ? window.Config.admin : {};
                var isSuperAdmin = admin.group_id == 1; // 超级管理员组ID为1
                
                $("tbody tr[data-index]", this).each(function () {
                    // 超级管理员可以选择所有管理员，其他用户只能选择自己
                    if (!isSuperAdmin && parseInt($("td:eq(1)", this).text()) != Config.admin.id) {
                        $("input[type=checkbox]", this).prop("disabled", true);
                    }
                });
            });

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                columns: [
                    [
                        {field: 'state', checkbox: true, },
                        {field: 'id', title: 'ID'},
                        {field: 'username', title: __('Username')},
                        {field: 'nickname', title: __('Nickname')},
                        {field: 'groups_text', title: __('Group'), operate:false, formatter: Table.api.formatter.label},
                        {field: 'school_id', title: "管理学校"},
                        {field: 'community_id', title: "管理社区学校"},
                        {field: 'status', title: __("Status"), searchList: {"normal":__('Normal'),"hidden":__('Hidden')}, formatter: Table.api.formatter.status},
                        {field: 'ocation_id', title: "管理社区"},
                        {field: 'logintime', title: __('Login time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},
                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: function (value, row, index) {
                                var admin = window.Config && window.Config.admin ? window.Config.admin : {};
                                var isSuperAdmin = admin.group_id == 1; // 超级管理员组ID为1
                                var isSchoolAdmin = admin.group_id == 3;
                                var isTargetCommunityAdmin = row.groups && (row.groups.indexOf('8') !== -1 || row.groups_text.indexOf('社区') !== -1);
                                
                                // 超级管理员可以操作所有管理员
                                if (isSuperAdmin) {
                                    return Table.api.formatter.operate.call(this, value, row, index);
                                }
                                
                                // 自己始终可以操作自己
                                if (row.id == admin.id) {
                                    return Table.api.formatter.operate.call(this, value, row, index);
                                }
                                
                                // 学校管理员可以操作社区管理员
                                if (isSchoolAdmin && isTargetCommunityAdmin) {
                                    return Table.api.formatter.operate.call(this, value, row, index);
                                }
                                
                                // 其他情况按原逻辑（可根据需要隐藏按钮）
                                return '';
                            }}
                    ]
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        add: function () {
            Controller.api.bindevent();
            
            // Add event listener for location selection
            $(document).on('change', '#c-ocation_id_community', function() {
                var selectedText = $(this).find('option:selected').text().trim();
                
                // Only proceed if we have a selected text

                if (selectedText) {
                    var nicknameField = $('#nickname');
                    var usernameField = $('#username');
                    var passwordField = $('#password');
                    var currentNickname = nicknameField.val();
                    var currentUsername = usernameField.val();
                    var currentPassword = passwordField.val();
                    
                    // 自动设置密码为 123456
                    if (!currentPassword) {
                        // 如果密码为空，直接设置
                        passwordField.val('123456');
                    } else {
                        // 如果密码已有值，提示用户确认
                        if (typeof Layer !== 'undefined' && Layer.confirm) {
                            Layer.confirm('密码字段已有值，是否覆盖为默认密码“123456”？', {
                                title: '覆盖确认',
                                icon: 3,
                                btn: ['确定覆盖', '保持原值']
                            }, function(index) {
                                passwordField.val('123456');
                                Layer.close(index);
                                Layer.msg('密码已更新为: 123456', {icon: 1, time: 2000});
                            });
                        } else {
                            // Fallback to native confirm
                            if (confirm('密码字段已有值，是否覆盖为默认密码“123456”？')) {
                                passwordField.val('123456');
                            }
                        }
                    }
                    
                    // Check if nickname field has value

                    if (currentNickname) {
                        // Show confirmation dialog for nickname
                        if (typeof Layer !== 'undefined' && Layer.confirm) {
                            Layer.confirm('昵称字段已有值："' + currentNickname + '",是否覆盖为教学点名称："' + selectedText + '"？', {
                                title: '覆盖确认',
                                icon: 3,
                                btn: ['确定覆盖', '保持原值']
                            }, function(index) {
                                nicknameField.val(selectedText);
                                Layer.close(index);
                                Layer.msg('昵称已更新为：' + selectedText, {icon: 1, time: 2000});
                            });
                        } else {
                            // Fallback to native confirm
                            if (confirm('昵称字段已有值："' + currentNickname + '",是否覆盖为教学点名称："' + selectedText + '"？')) {
                                nicknameField.val(selectedText);
                            }
                        }
                    } else {
                        // If nickname is empty, set it directly
                        nicknameField.val(selectedText);
                    }
                    
                    // Check if username field has value
                    if (currentUsername) {
                        // Generate the new username first using first letter of pinyin
                        // 检查pinyin模块是否可用
                        if (typeof pinyin === 'undefined') {
                            Controller.api.showErrorMessage('拼音转换模块未加载，无法生成用户名');
                            return;
                        }
                        
                        try {
                            var pinyinArray = pinyin(selectedText, {
                                style: pinyin.STYLE_FIRST_LETTER, // 使用首字母风格
                                heteronym: false
                            });
                            if (!pinyinArray || pinyinArray.length === 0) {
                                Controller.api.showErrorMessage('拼音转换失败，无法生成用户名');
                                return;
                            }
                            
                            var firstLetters = pinyinArray.join(''); // 直接连接，因为STYLE_FIRST_LETTER已经返回首字母
                            if (!firstLetters || firstLetters.length === 0) {
                                Controller.api.showErrorMessage('首字母提取失败，无法生成用户名');
                                return;
                            }
                            
                            var baseUsername = firstLetters + 'admin';
                            if (!baseUsername || baseUsername === 'admin') {
                                Controller.api.showErrorMessage('用户名生成失败，请检查教学点名称');
                                return;
                            }
                        
                            // Show confirmation dialog for username
                            if (typeof Layer !== 'undefined' && Layer.confirm) {
                                Layer.confirm('用户名字段已有值："' + currentUsername + '",是否覆盖为："' + baseUsername + '"（如重复会自动加数字）？', {
                                    title: '覆盖确认',
                                    icon: 3,
                                    btn: ['确定覆盖', '保持原值']
                                }, function(index) {
                                    Controller.api.generateUniqueUsername(baseUsername, usernameField,nicknameField,selectedText);
                                    Layer.close(index);
                                });
                            } else {
                                // Fallback to native confirm
                                if (confirm('用户名字段已有值："' + currentUsername + '",是否覆盖为："' + baseUsername + '"（如重复会自动加数字）？')) {
                                    Controller.api.generateUniqueUsername(baseUsername, usernameField,nicknameField,selectedText);
                                }
                            }
                        } catch (error) {
                            Controller.api.showErrorMessage('拼音转换出错: ' + error.message);
                        }
                    } else {
                        // If username is empty, set it directly
                        // 检查pinyin模块是否可用
                        if (typeof pinyin === 'undefined') {
                            Controller.api.showErrorMessage('拼音转换模块未加载，无法生成用户名');
                            return;
                        }
                        try {
                            var pinyinArray = pinyin(selectedText, {
                                style: pinyin.STYLE_FIRST_LETTER, // 使用首字母风格
                                heteronym: false
                            });
                            // 检查数组是否为空
                            if (!pinyinArray || pinyinArray.length === 0) {
                                Controller.api.showErrorMessage('拼音转换失败，无法生成用户名');
                                return;
                            }
                            
                            var firstLetters = pinyinArray.join(''); // 直接连接，因为STYLE_FIRST_LETTER已经返回首字母
                            // 检查首字母是否为空
                            if (!firstLetters || firstLetters.length === 0) {
                                Controller.api.showErrorMessage('首字母提取失败，无法生成用户名');
                                return;
                            }
                            
                            var baseUsername = firstLetters + 'admin';
                            // 检查基础用户名
                            if (!baseUsername || baseUsername === 'admin') {
                                Controller.api.showErrorMessage('用户名生成失败，请检查教学点名称');
                                return;
                            }
                            
                            Controller.api.generateUniqueUsername(baseUsername, usernameField, nicknameField, selectedText);
                            nicknameField.val(selectedText);

                        } catch (error) {
                            Controller.api.showErrorMessage('拼音转换出错: ' + error.message);
                        }
                    }
                }
            });
            
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js?';
            document.head.appendChild(script);
            Form.api.bindevent($("form[role=form]"));
        },
        edit: function () {
            var row = JSON.parse($('#row').val());
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js?';
            document.head.appendChild(script);
            $(document).ready(function() {
                // 设置教学点下拉框高度为400px
                $('#c-ocation_class').css('height', '800px');
                
                // 绑定"用昵称来生成子教学点名称"按钮点击事件
                $('#btn-get-generate-ocation-name').on('click', function() {
                    var nickname = $('#nickname').val();
                    if (!nickname) {
                        if (typeof Layer !== 'undefined' && Layer.msg) {
                            Layer.msg('请先填写昵称', {icon: 2, time: 2000});
                        } else {
                            alert('请先填写昵称');
                        }
                        return;
                    }
                    
                    // 显示确认对话框
                    if (typeof Layer !== 'undefined' && Layer.confirm) {
                        Layer.confirm('确定要使用昵称"' + nickname + '"创建子教学点吗？', {
                            title: '确认创建子教学点',
                            icon: 3,
                            btn: ['确定', '取消']
                        }, function(index) {
                            // 发送请求创建子教学点
                            $.ajax({
                                url: '/auth/admin/generateOcationByNickname',
                                type: 'POST',
                                data: {
                                    nickname: nickname,
                                    admin_id: admin_id
                                },
                                dataType: 'json',
                                success: function(response) {
                                    if (response.code === 1) {
                                        Layer.msg('子教学点创建成功', {icon: 1, time: 2000});
                                        // 可以在这里刷新页面或更新相关字段
                                        setTimeout(function() {
                                            location.reload();
                                        }, 2000);
                                    } else {
                                        Layer.msg(response.msg || '创建失败', {icon: 2, time: 3000});
                                    }
                                },
                                error: function(xhr, status, error) {
                                    Layer.msg('请求失败：' + error, {icon: 2, time: 3000});
                                }
                            });
                            Layer.close(index);
                        });
                    } else {
                        // Fallback to native confirm
                        if (confirm('确定要使用昵称"' + nickname + '"创建子教学点吗？')) {
                            $.ajax({
                                url: 'auth/admin/generateOcationByNickname',
                                type: 'POST',
                                data: {
                                    nickname: nickname
                                },
                                dataType: 'json',
                                success: function(response) {
                                    if (response.code === 1) {
                                        alert('子教学点创建成功');
                                        setTimeout(function() {
                                            location.reload();
                                        }, 2000);
                                    } else {
                                        alert(response.msg || '创建失败');
                                    }
                                },
                                error: function(xhr, status, error) {
                                    alert('请求失败：' + error);
                                }
                            });
                        }
                    }
                });
            });
            Form.api.bindevent($("form[role=form]"));
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            },
            
            // 生成唯一用户名（检查数据库重复）
            generateUniqueUsername: function(baseUsername, usernameField, nicknameField, selectedText) {
                var that = this;
                // 首先检查基础用户名是否可用
                this.checkUsernameAvailable(baseUsername, function(isAvailable) {
                    if (isAvailable) {
                        // 基础用户名可用，直接使用
                        usernameField.val(baseUsername);
                        if (nicknameField && selectedText) {
                            nicknameField.val(selectedText);
                        }
                        that.showSuccessMessage('用户名已设置为：' + baseUsername);
                    } else {
                        // 基础用户名已存在，生成带随机数字的版本
                        that.generateUsernameWithNumber(baseUsername, usernameField, nicknameField, selectedText);
                    }
                });
            },
            
            // 检查用户名是否可用
            checkUsernameAvailable: function(username, callback) {
                var currentAdminId = $('#admin-id').val() || $('input[name="row[id]"]').val() || 0;
                $.ajax({
                    url: 'auth/admin/checkUsername',
                    type: 'POST',
                    data: {
                        'row[username]': username,  // 使用与表单字段匹配的参数名
                        username: username,         // 保留兼容性
                        id: currentAdminId
                    },
                    dataType: 'json',
                    success: function(response) {
                        if (response && typeof response.code !== 'undefined') {
                            // FastAdmin 标准响应格式
                            callback(response.code === 1);
                        } else {
                            // 其他响应格式，默认为可用
                            callback(true);
                        }
                    },
                    error: function(xhr, status, error) {
                        // 网络错误，默认为可用
                        callback(true);
                    }
                });
            },
            
            // 生成带随机数字的用户名
            generateUsernameWithNumber: function(baseUsername, usernameField, nicknameField, selectedText) {
                var that = this;
                var attempts = 0;
                var maxAttempts = 10;
                
                function tryGenerate() {
                    attempts++;
                    if (attempts > maxAttempts) {
                        that.showErrorMessage('生成唯一用户名失败，请手动输入');
                        return;
                    }
                    
                    // 生成 1-999 的随机数字
                    var randomNum = Math.floor(Math.random() * 999) + 1;
                    var newUsername = baseUsername + randomNum;
                    
                    that.checkUsernameAvailable(newUsername, function(isAvailable) {
                        if (isAvailable) {
                            usernameField.val(newUsername);
                            if (nicknameField && selectedText) {
                                nicknameField.val(selectedText);
                            }
                            that.showSuccessMessage('用户名已设置为：' + newUsername + ' （原名称已存在，自动添加数字后缀）');
                        } else {
                            // 这个也存在，继续尝试
                            tryGenerate();
                        }
                    });
                }
                
                tryGenerate();
            },
            
            // 显示成功消息
            showSuccessMessage: function(message) {
                if (typeof Layer !== 'undefined' && Layer.msg) {
                    Layer.msg(message, {icon: 1, time: 2000});
                } else if (typeof Toastr !== 'undefined') {
                    Toastr.success(message);
                } else {
                }
            },
            
            // 显示错误消息
            showErrorMessage: function(message) {
                if (typeof Layer !== 'undefined' && Layer.msg) {
                    Layer.msg(message, {icon: 2, time: 3000});
                } else if (typeof Toastr !== 'undefined') {
                    Toastr.error(message);
                } else {
                    alert('错误：' + message);
                }
            }
        }
    };
    return Controller;
});
